/**
 * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package pe.edu.aprolab.identidad.model.impl;

import com.liferay.portal.kernel.bean.AutoEscapeBeanHandler;
import com.liferay.portal.kernel.json.JSON;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.ProxyUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.model.CacheModel;
import com.liferay.portal.model.impl.BaseModelImpl;
import com.liferay.portal.service.ServiceContext;

import com.liferay.portlet.expando.model.ExpandoBridge;
import com.liferay.portlet.expando.util.ExpandoBridgeFactoryUtil;

import pe.edu.aprolab.identidad.model.Persona;
import pe.edu.aprolab.identidad.model.PersonaModel;
import pe.edu.aprolab.identidad.model.PersonaSoap;

import java.io.Serializable;

import java.sql.Types;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * The base model implementation for the Persona service. Represents a row in the &quot;ID_Persona&quot; database table, with each column mapped to a property of this class.
 *
 * <p>
 * This implementation and its corresponding interface {@link pe.edu.aprolab.identidad.model.PersonaModel} exist only as a container for the default property accessors generated by ServiceBuilder. Helper methods and all application logic should be put in {@link PersonaImpl}.
 * </p>
 *
 * @author Jorge Loayza Soloisolo
 * @see PersonaImpl
 * @see pe.edu.aprolab.identidad.model.Persona
 * @see pe.edu.aprolab.identidad.model.PersonaModel
 * @generated
 */
@JSON(strict = true)
public class PersonaModelImpl extends BaseModelImpl<Persona>
	implements PersonaModel {
	/*
	 * NOTE FOR DEVELOPERS:
	 *
	 * Never modify or reference this class directly. All methods that expect a persona model instance should use the {@link pe.edu.aprolab.identidad.model.Persona} interface instead.
	 */
	public static final String TABLE_NAME = "ID_Persona";
	public static final Object[][] TABLE_COLUMNS = {
			{ "personaId", Types.BIGINT },
			{ "companyId", Types.BIGINT },
			{ "createDate", Types.TIMESTAMP },
			{ "modifiedDate", Types.TIMESTAMP },
			{ "codigoId", Types.VARCHAR },
			{ "nombres", Types.VARCHAR },
			{ "apellidoPaterno", Types.VARCHAR },
			{ "apellidoMaterno", Types.VARCHAR },
			{ "genero", Types.BOOLEAN },
			{ "estadoCivil", Types.INTEGER },
			{ "fechaNacimiento", Types.TIMESTAMP },
			{ "ubigeoNacimiento", Types.VARCHAR }
		};
	public static final String TABLE_SQL_CREATE = "create table ID_Persona (personaId LONG not null primary key,companyId LONG,createDate DATE null,modifiedDate DATE null,codigoId VARCHAR(75) null,nombres VARCHAR(75) null,apellidoPaterno VARCHAR(75) null,apellidoMaterno VARCHAR(75) null,genero BOOLEAN,estadoCivil INTEGER,fechaNacimiento DATE null,ubigeoNacimiento VARCHAR(75) null)";
	public static final String TABLE_SQL_DROP = "drop table ID_Persona";
	public static final String ORDER_BY_JPQL = " ORDER BY persona.codigoId ASC";
	public static final String ORDER_BY_SQL = " ORDER BY ID_Persona.codigoId ASC";
	public static final String DATA_SOURCE = "liferayDataSource";
	public static final String SESSION_FACTORY = "liferaySessionFactory";
	public static final String TX_MANAGER = "liferayTransactionManager";
	public static final boolean ENTITY_CACHE_ENABLED = GetterUtil.getBoolean(com.liferay.util.service.ServiceProps.get(
				"value.object.entity.cache.enabled.pe.edu.aprolab.identidad.model.Persona"),
			true);
	public static final boolean FINDER_CACHE_ENABLED = GetterUtil.getBoolean(com.liferay.util.service.ServiceProps.get(
				"value.object.finder.cache.enabled.pe.edu.aprolab.identidad.model.Persona"),
			true);
	public static final boolean COLUMN_BITMASK_ENABLED = GetterUtil.getBoolean(com.liferay.util.service.ServiceProps.get(
				"value.object.column.bitmask.enabled.pe.edu.aprolab.identidad.model.Persona"),
			true);
	public static long CODIGOID_COLUMN_BITMASK = 1L;
	public static long COMPANYID_COLUMN_BITMASK = 2L;

	/**
	 * Converts the soap model instance into a normal model instance.
	 *
	 * @param soapModel the soap model instance to convert
	 * @return the normal model instance
	 */
	public static Persona toModel(PersonaSoap soapModel) {
		if (soapModel == null) {
			return null;
		}

		Persona model = new PersonaImpl();

		model.setPersonaId(soapModel.getPersonaId());
		model.setCompanyId(soapModel.getCompanyId());
		model.setCreateDate(soapModel.getCreateDate());
		model.setModifiedDate(soapModel.getModifiedDate());
		model.setCodigoId(soapModel.getCodigoId());
		model.setNombres(soapModel.getNombres());
		model.setApellidoPaterno(soapModel.getApellidoPaterno());
		model.setApellidoMaterno(soapModel.getApellidoMaterno());
		model.setGenero(soapModel.getGenero());
		model.setEstadoCivil(soapModel.getEstadoCivil());
		model.setFechaNacimiento(soapModel.getFechaNacimiento());
		model.setUbigeoNacimiento(soapModel.getUbigeoNacimiento());

		return model;
	}

	/**
	 * Converts the soap model instances into normal model instances.
	 *
	 * @param soapModels the soap model instances to convert
	 * @return the normal model instances
	 */
	public static List<Persona> toModels(PersonaSoap[] soapModels) {
		if (soapModels == null) {
			return null;
		}

		List<Persona> models = new ArrayList<Persona>(soapModels.length);

		for (PersonaSoap soapModel : soapModels) {
			models.add(toModel(soapModel));
		}

		return models;
	}

	public static final long LOCK_EXPIRATION_TIME = GetterUtil.getLong(com.liferay.util.service.ServiceProps.get(
				"lock.expiration.time.pe.edu.aprolab.identidad.model.Persona"));

	public PersonaModelImpl() {
	}

	@Override
	public long getPrimaryKey() {
		return _personaId;
	}

	@Override
	public void setPrimaryKey(long primaryKey) {
		setPersonaId(primaryKey);
	}

	@Override
	public Serializable getPrimaryKeyObj() {
		return _personaId;
	}

	@Override
	public void setPrimaryKeyObj(Serializable primaryKeyObj) {
		setPrimaryKey(((Long)primaryKeyObj).longValue());
	}

	@Override
	public Class<?> getModelClass() {
		return Persona.class;
	}

	@Override
	public String getModelClassName() {
		return Persona.class.getName();
	}

	@Override
	public Map<String, Object> getModelAttributes() {
		Map<String, Object> attributes = new HashMap<String, Object>();

		attributes.put("personaId", getPersonaId());
		attributes.put("companyId", getCompanyId());
		attributes.put("createDate", getCreateDate());
		attributes.put("modifiedDate", getModifiedDate());
		attributes.put("codigoId", getCodigoId());
		attributes.put("nombres", getNombres());
		attributes.put("apellidoPaterno", getApellidoPaterno());
		attributes.put("apellidoMaterno", getApellidoMaterno());
		attributes.put("genero", getGenero());
		attributes.put("estadoCivil", getEstadoCivil());
		attributes.put("fechaNacimiento", getFechaNacimiento());
		attributes.put("ubigeoNacimiento", getUbigeoNacimiento());

		return attributes;
	}

	@Override
	public void setModelAttributes(Map<String, Object> attributes) {
		Long personaId = (Long)attributes.get("personaId");

		if (personaId != null) {
			setPersonaId(personaId);
		}

		Long companyId = (Long)attributes.get("companyId");

		if (companyId != null) {
			setCompanyId(companyId);
		}

		Date createDate = (Date)attributes.get("createDate");

		if (createDate != null) {
			setCreateDate(createDate);
		}

		Date modifiedDate = (Date)attributes.get("modifiedDate");

		if (modifiedDate != null) {
			setModifiedDate(modifiedDate);
		}

		String codigoId = (String)attributes.get("codigoId");

		if (codigoId != null) {
			setCodigoId(codigoId);
		}

		String nombres = (String)attributes.get("nombres");

		if (nombres != null) {
			setNombres(nombres);
		}

		String apellidoPaterno = (String)attributes.get("apellidoPaterno");

		if (apellidoPaterno != null) {
			setApellidoPaterno(apellidoPaterno);
		}

		String apellidoMaterno = (String)attributes.get("apellidoMaterno");

		if (apellidoMaterno != null) {
			setApellidoMaterno(apellidoMaterno);
		}

		Boolean genero = (Boolean)attributes.get("genero");

		if (genero != null) {
			setGenero(genero);
		}

		Integer estadoCivil = (Integer)attributes.get("estadoCivil");

		if (estadoCivil != null) {
			setEstadoCivil(estadoCivil);
		}

		Date fechaNacimiento = (Date)attributes.get("fechaNacimiento");

		if (fechaNacimiento != null) {
			setFechaNacimiento(fechaNacimiento);
		}

		String ubigeoNacimiento = (String)attributes.get("ubigeoNacimiento");

		if (ubigeoNacimiento != null) {
			setUbigeoNacimiento(ubigeoNacimiento);
		}
	}

	@JSON
	@Override
	public long getPersonaId() {
		return _personaId;
	}

	@Override
	public void setPersonaId(long personaId) {
		_personaId = personaId;
	}

	@JSON
	@Override
	public long getCompanyId() {
		return _companyId;
	}

	@Override
	public void setCompanyId(long companyId) {
		_columnBitmask |= COMPANYID_COLUMN_BITMASK;

		if (!_setOriginalCompanyId) {
			_setOriginalCompanyId = true;

			_originalCompanyId = _companyId;
		}

		_companyId = companyId;
	}

	public long getOriginalCompanyId() {
		return _originalCompanyId;
	}

	@JSON
	@Override
	public Date getCreateDate() {
		return _createDate;
	}

	@Override
	public void setCreateDate(Date createDate) {
		_createDate = createDate;
	}

	@JSON
	@Override
	public Date getModifiedDate() {
		return _modifiedDate;
	}

	@Override
	public void setModifiedDate(Date modifiedDate) {
		_modifiedDate = modifiedDate;
	}

	@JSON
	@Override
	public String getCodigoId() {
		if (_codigoId == null) {
			return StringPool.BLANK;
		}
		else {
			return _codigoId;
		}
	}

	@Override
	public void setCodigoId(String codigoId) {
		_columnBitmask = -1L;

		if (_originalCodigoId == null) {
			_originalCodigoId = _codigoId;
		}

		_codigoId = codigoId;
	}

	public String getOriginalCodigoId() {
		return GetterUtil.getString(_originalCodigoId);
	}

	@JSON
	@Override
	public String getNombres() {
		if (_nombres == null) {
			return StringPool.BLANK;
		}
		else {
			return _nombres;
		}
	}

	@Override
	public void setNombres(String nombres) {
		_nombres = nombres;
	}

	@JSON
	@Override
	public String getApellidoPaterno() {
		if (_apellidoPaterno == null) {
			return StringPool.BLANK;
		}
		else {
			return _apellidoPaterno;
		}
	}

	@Override
	public void setApellidoPaterno(String apellidoPaterno) {
		_apellidoPaterno = apellidoPaterno;
	}

	@JSON
	@Override
	public String getApellidoMaterno() {
		if (_apellidoMaterno == null) {
			return StringPool.BLANK;
		}
		else {
			return _apellidoMaterno;
		}
	}

	@Override
	public void setApellidoMaterno(String apellidoMaterno) {
		_apellidoMaterno = apellidoMaterno;
	}

	@JSON
	@Override
	public boolean getGenero() {
		return _genero;
	}

	@Override
	public boolean isGenero() {
		return _genero;
	}

	@Override
	public void setGenero(boolean genero) {
		_genero = genero;
	}

	@JSON
	@Override
	public int getEstadoCivil() {
		return _estadoCivil;
	}

	@Override
	public void setEstadoCivil(int estadoCivil) {
		_estadoCivil = estadoCivil;
	}

	@JSON
	@Override
	public Date getFechaNacimiento() {
		return _fechaNacimiento;
	}

	@Override
	public void setFechaNacimiento(Date fechaNacimiento) {
		_fechaNacimiento = fechaNacimiento;
	}

	@JSON
	@Override
	public String getUbigeoNacimiento() {
		if (_ubigeoNacimiento == null) {
			return StringPool.BLANK;
		}
		else {
			return _ubigeoNacimiento;
		}
	}

	@Override
	public void setUbigeoNacimiento(String ubigeoNacimiento) {
		_ubigeoNacimiento = ubigeoNacimiento;
	}

	public long getColumnBitmask() {
		return _columnBitmask;
	}

	@Override
	public ExpandoBridge getExpandoBridge() {
		return ExpandoBridgeFactoryUtil.getExpandoBridge(getCompanyId(),
			Persona.class.getName(), getPrimaryKey());
	}

	@Override
	public void setExpandoBridgeAttributes(ServiceContext serviceContext) {
		ExpandoBridge expandoBridge = getExpandoBridge();

		expandoBridge.setAttributes(serviceContext);
	}

	@Override
	public Persona toEscapedModel() {
		if (_escapedModel == null) {
			_escapedModel = (Persona)ProxyUtil.newProxyInstance(_classLoader,
					_escapedModelInterfaces, new AutoEscapeBeanHandler(this));
		}

		return _escapedModel;
	}

	@Override
	public Object clone() {
		PersonaImpl personaImpl = new PersonaImpl();

		personaImpl.setPersonaId(getPersonaId());
		personaImpl.setCompanyId(getCompanyId());
		personaImpl.setCreateDate(getCreateDate());
		personaImpl.setModifiedDate(getModifiedDate());
		personaImpl.setCodigoId(getCodigoId());
		personaImpl.setNombres(getNombres());
		personaImpl.setApellidoPaterno(getApellidoPaterno());
		personaImpl.setApellidoMaterno(getApellidoMaterno());
		personaImpl.setGenero(getGenero());
		personaImpl.setEstadoCivil(getEstadoCivil());
		personaImpl.setFechaNacimiento(getFechaNacimiento());
		personaImpl.setUbigeoNacimiento(getUbigeoNacimiento());

		personaImpl.resetOriginalValues();

		return personaImpl;
	}

	@Override
	public int compareTo(Persona persona) {
		int value = 0;

		value = getCodigoId().compareTo(persona.getCodigoId());

		if (value != 0) {
			return value;
		}

		return 0;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}

		if (!(obj instanceof Persona)) {
			return false;
		}

		Persona persona = (Persona)obj;

		long primaryKey = persona.getPrimaryKey();

		if (getPrimaryKey() == primaryKey) {
			return true;
		}
		else {
			return false;
		}
	}

	@Override
	public int hashCode() {
		return (int)getPrimaryKey();
	}

	@Override
	public void resetOriginalValues() {
		PersonaModelImpl personaModelImpl = this;

		personaModelImpl._originalCompanyId = personaModelImpl._companyId;

		personaModelImpl._setOriginalCompanyId = false;

		personaModelImpl._originalCodigoId = personaModelImpl._codigoId;

		personaModelImpl._columnBitmask = 0;
	}

	@Override
	public CacheModel<Persona> toCacheModel() {
		PersonaCacheModel personaCacheModel = new PersonaCacheModel();

		personaCacheModel.personaId = getPersonaId();

		personaCacheModel.companyId = getCompanyId();

		Date createDate = getCreateDate();

		if (createDate != null) {
			personaCacheModel.createDate = createDate.getTime();
		}
		else {
			personaCacheModel.createDate = Long.MIN_VALUE;
		}

		Date modifiedDate = getModifiedDate();

		if (modifiedDate != null) {
			personaCacheModel.modifiedDate = modifiedDate.getTime();
		}
		else {
			personaCacheModel.modifiedDate = Long.MIN_VALUE;
		}

		personaCacheModel.codigoId = getCodigoId();

		String codigoId = personaCacheModel.codigoId;

		if ((codigoId != null) && (codigoId.length() == 0)) {
			personaCacheModel.codigoId = null;
		}

		personaCacheModel.nombres = getNombres();

		String nombres = personaCacheModel.nombres;

		if ((nombres != null) && (nombres.length() == 0)) {
			personaCacheModel.nombres = null;
		}

		personaCacheModel.apellidoPaterno = getApellidoPaterno();

		String apellidoPaterno = personaCacheModel.apellidoPaterno;

		if ((apellidoPaterno != null) && (apellidoPaterno.length() == 0)) {
			personaCacheModel.apellidoPaterno = null;
		}

		personaCacheModel.apellidoMaterno = getApellidoMaterno();

		String apellidoMaterno = personaCacheModel.apellidoMaterno;

		if ((apellidoMaterno != null) && (apellidoMaterno.length() == 0)) {
			personaCacheModel.apellidoMaterno = null;
		}

		personaCacheModel.genero = getGenero();

		personaCacheModel.estadoCivil = getEstadoCivil();

		Date fechaNacimiento = getFechaNacimiento();

		if (fechaNacimiento != null) {
			personaCacheModel.fechaNacimiento = fechaNacimiento.getTime();
		}
		else {
			personaCacheModel.fechaNacimiento = Long.MIN_VALUE;
		}

		personaCacheModel.ubigeoNacimiento = getUbigeoNacimiento();

		String ubigeoNacimiento = personaCacheModel.ubigeoNacimiento;

		if ((ubigeoNacimiento != null) && (ubigeoNacimiento.length() == 0)) {
			personaCacheModel.ubigeoNacimiento = null;
		}

		return personaCacheModel;
	}

	@Override
	public String toString() {
		StringBundler sb = new StringBundler(25);

		sb.append("{personaId=");
		sb.append(getPersonaId());
		sb.append(", companyId=");
		sb.append(getCompanyId());
		sb.append(", createDate=");
		sb.append(getCreateDate());
		sb.append(", modifiedDate=");
		sb.append(getModifiedDate());
		sb.append(", codigoId=");
		sb.append(getCodigoId());
		sb.append(", nombres=");
		sb.append(getNombres());
		sb.append(", apellidoPaterno=");
		sb.append(getApellidoPaterno());
		sb.append(", apellidoMaterno=");
		sb.append(getApellidoMaterno());
		sb.append(", genero=");
		sb.append(getGenero());
		sb.append(", estadoCivil=");
		sb.append(getEstadoCivil());
		sb.append(", fechaNacimiento=");
		sb.append(getFechaNacimiento());
		sb.append(", ubigeoNacimiento=");
		sb.append(getUbigeoNacimiento());
		sb.append("}");

		return sb.toString();
	}

	@Override
	public String toXmlString() {
		StringBundler sb = new StringBundler(40);

		sb.append("<model><model-name>");
		sb.append("pe.edu.aprolab.identidad.model.Persona");
		sb.append("</model-name>");

		sb.append(
			"<column><column-name>personaId</column-name><column-value><![CDATA[");
		sb.append(getPersonaId());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>companyId</column-name><column-value><![CDATA[");
		sb.append(getCompanyId());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>createDate</column-name><column-value><![CDATA[");
		sb.append(getCreateDate());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>modifiedDate</column-name><column-value><![CDATA[");
		sb.append(getModifiedDate());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>codigoId</column-name><column-value><![CDATA[");
		sb.append(getCodigoId());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>nombres</column-name><column-value><![CDATA[");
		sb.append(getNombres());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>apellidoPaterno</column-name><column-value><![CDATA[");
		sb.append(getApellidoPaterno());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>apellidoMaterno</column-name><column-value><![CDATA[");
		sb.append(getApellidoMaterno());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>genero</column-name><column-value><![CDATA[");
		sb.append(getGenero());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>estadoCivil</column-name><column-value><![CDATA[");
		sb.append(getEstadoCivil());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>fechaNacimiento</column-name><column-value><![CDATA[");
		sb.append(getFechaNacimiento());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>ubigeoNacimiento</column-name><column-value><![CDATA[");
		sb.append(getUbigeoNacimiento());
		sb.append("]]></column-value></column>");

		sb.append("</model>");

		return sb.toString();
	}

	private static ClassLoader _classLoader = Persona.class.getClassLoader();
	private static Class<?>[] _escapedModelInterfaces = new Class[] {
			Persona.class
		};
	private long _personaId;
	private long _companyId;
	private long _originalCompanyId;
	private boolean _setOriginalCompanyId;
	private Date _createDate;
	private Date _modifiedDate;
	private String _codigoId;
	private String _originalCodigoId;
	private String _nombres;
	private String _apellidoPaterno;
	private String _apellidoMaterno;
	private boolean _genero;
	private int _estadoCivil;
	private Date _fechaNacimiento;
	private String _ubigeoNacimiento;
	private long _columnBitmask;
	private Persona _escapedModel;
}